
//泛型

//泛型的引入
// 实现一个类，类中包含一个数组成员，使得数组中可以存放任何类型的数据，也可以根据成员方法返回数组中某个下标的值

//class Data{
//
//    public Object[] array = new Object[10];
//
//    public void setArray(int pos,Object a) {
//        array[pos] = a;
//    }
//
//    public Object[] getArray() {
//        return array;
//    }
//}


//class Data <T>{
//
//    public Object[] array = new Object[10];
//
//    public void setArray(int pos,T a) {
//        array[pos] = a;
//    }
//
//    public T getArray(int pos) {
//        return (T)array[pos];
//    }
//}
//
//
//public class Test {
//    public static void main(String[] args) {
//
//       Data data = new Data();
////       data.setArray(0,1);
////       data.setArray(1,2);
////       data.setArray(2,"hello");
//
//
//    }
//}



//泛型  其实 相当于 类的参数
// 因为类没有形参列表的概念
//在我看来  类名<>
//就是     方法名()
//      泛型<> 只是为了 区别方法 的()


// 方法名（形参列表）
// 类名 （类型形参列表）     // 类型参数列表 里 只能写 类类型（比如 Integer , Byte , Double ,Short .....等）
                         //               不能写 简单类型（比如 int ， byte ，double...等）

   //很相似于  方法中的参数列表 和 参数
//  方法名（参数类型1 参数名称1, 参数类型2 参数名称2.......）
//  方法中的参数列表 必须要有 具体类型 和 对象名

//而  类<> 就像 方法（）
//  类<参数名称1 , 参数名称2......>
//但 <> 里面的参数就是类型 因此只需要 一个名字 放入即可 比如 <T>


class Data<T>{
    Object[] array = new Object[10];

    public void setArray(int pos,T a){
        array[pos] = a;
    }

    public T getArray(int pos){
        return (T)array[pos];
    }

}

class Person{

}

//而泛型存在的作用 只是 检查 类型是否正确
//在底层调用 中 并没有 泛型的概念

public class Test {
    public static void main(String[] args) {
        // <类型参数列表>
        // 只能传入 类类型
       Data<Integer> data = new Data<>();
       Data<Person> data1 = new Data<>();
    }
}